var develop_funcs = {
	'opciones' : function(){
		for(i in develop_funcs){
			console.log(i);
		}
	},
	'ver_series' : function(codigo_documento, usuario){
		if(window.xhr){xhr.abort();}
		xhr = $.get(_WEB_ROOT + 'codigo_documentos/view/'+codigo_documento, function(data){
			if(data.length){
				tabla = '<div><table>'+$(data).find('table').html()+'</table></div>';
				$tabla = $(tabla);
				if(typeof usuario=='undefined'){
					usuario = $('#titlebar div.usuario').text().trim();
				} else {
					usuario = usuario.toUpperCase();
				}
				
				$tabla.find('tr:not(:first)')
					.find('td:eq(0)').css({'font-weight':'bold','font-size':'large'}).end()
					.find('td:eq(8):not(:contains('+usuario+'))').parent().remove();
				
				$tabla.dialog({
					title:'SERIES::'+ usuario+'  ::  '+codigo_documento,
					maxHeight:500,
					width:1000,
					height:(($tabla.find('table tr').length*21)+50),
					modal:true,
					close:function(){
						$(this).dialog('destroy').remove();
					}
				});
			}
		});
	},
	'show_hidden_value' : function(){
		hide_hidden_value();
		$('input:hidden').each(function(){
			$(this).after('<span class="info-hidden" style="padding:2px;background-color:pink; border:solid 1px #FF0000;color:#FF0000;width:auto;">'+
						  this.name +
						  ':<i><b>' +
						  this.value +
						  '</b></i></span>');});
	},
	'hide_hidden_value' : function(){
		$('.info-hidden').remove();
	},
	'cake_log' : function(){
		$('.cake-sql-log').toggle();
	},
	'show_index' : function(){
		hide_index();
		$('[tabindex]').each(function(){
			$(this).after('<span class="tabindex ui-state-error" style="position:absolute; x-index:100">'+
						  this.tabIndex +
						  '</span>')});
	},
	'hide_index' : function(){
		$('span.tabindex').remove();
	},
	'maildata' : function(){
		localStorage.maildata = maildata = JSON.stringify($('form').serializeObject());
	
		if(maildata.length>2000){
			alert(
				window.location.href+'\n\r'+
				"'"+maildata+"'");
		}else{
			mailto_user = 'mailto:'+
			escape(prompt('enviar a <usuario> de correo Corporacion ADC'))
			+'@corporacionadc.net?subject=error-'+escape(window.location.href)+
			escape(prompt('breve descripcion del error'))+'&body='+
			"'"+maildata+"'";
			window.location = mailto_user;
		}
	},
	'parsedata' : function(data){
		if(typeof data === 'string'){
			nadata = JSON.parse(data);
		} else {
			nadata = data;
		}
		
		hidn_data = '';
		for(var i in nadata){
		input = $('[name='+i.replace(/\[/g,'\\[').replace(/\]/g,'\\]')+']');
			if(input.length>0){
				input.val(nadata[i]);
			} else if(nadata[i]!==''){
				hidn_data += i + ' : ' + nadata[i] + '<br>';
			}
		}
		if(hidn_data.length){
			div = $('<div id="_hdn_data" style="overflow:auto;">'+hidn_data+'</div>').dialog({
				title:'datos a insertarse manualmente',
				width:300,
				height:500,
				position:['right','top']
			});
		}
	},
	'getfirebug' : function(){
		if(document.getElementById('FirebugLite')) return;
		E=document['createElement'+'NS']&&document.documentElement.namespaceURI;
		E=E?document['createElement'+'NS'](E,'script'):document['createElement']('script');
		E['setAttribute']('id','FirebugLite');
		E['setAttribute']('src',_WEB_ROOT + 'js/firebug-lite-beta.js#startOpened,enableTrace');
		E['setAttribute']('FirebugLite','4');
		(document['getElementsByTagName']('head')[0]||document['getElementsByTagName']('body')[0]).appendChild(E);
		E=new Image;
		E['setAttribute']('src',_WEB_ROOT + 'img/sprite.png');
	},
	'format_td' : function(){
		$('table.cake-sql-log td:nth-child(2)')
			.unbind('dblclick')
			.dblclick(function(){
				$this = $(this);
				if($this.find('textarea').length){
					$this
						.attr('style','')
						.html($this.find('textarea').val())
						.find('textarea').remove();
				} else {
					sql = $this.html();
					
					if(!sql.match(/\n/g)){
						sql = '--para utilizar todos los esquemas descomentar la siguiente linea\n--SET search_path = activos,almacenes,contabilidad,cuentas_corrientes,facturacion,logistica,maestros,mensajeria,migracion,personal,produccion,PUBLIC,produccion,reportes,seguridad,tesoreria,transporte;\n\n' +
							sql
								.replace(/\s+(FROM|WHERE|INNER JOIN|LEFT JOIN|OUTER JOIN|LEFT OUTER JOIN|GROUP BY|ORDER BY|HAVING)/ig, function(str){
									return '\n' + str.trim();
								})
								.replace(/ AND/g, '\n\tAND ')
								.replace(/\"\s*,\s*\"/g,'",\n\t"')
								.replace(/ OR /g,'\n\t\tOR ')
								.replace(/SELECT /g,'SELECT\n\t');
					}
					
					$this
						.css('background-color', 'rgba(255, 0, 0, 0.2)')
						.html('<textarea style="width:100%;text-decoration:none;text-transform:none;" class="noUppercase noHighLight" rows="10">'+ sql +'</textarea>' )
						.find('textarea').focus().select();
				}
			});
	},
	'_s' : function(input_name){
		//1º busqueda por id
		__s = document.getElementById(input_name);
		//2º busqueda por clase
		if(!__s){
			__s = document.getElementsByClassName(input_name);
		}
		//3º busqueda por css
		if(!__s){
			__s = document.querySelectorAll(input_name);
		}
		
		return __s;
	},
	'$toList' : function(){
		if(!arguments.length) return $(this);
		$this = $(this);
		lista = [];
		for(i=0,j=$this.length; i<j; i++){
			parametros = {};
			for(a=0,b=arguments.length; a<b; a++){
				parametros[arguments[a]] = $this.eq(i).attr(arguments[a]);
			}
			lista.push(parametros);
		}
		if(window.console && window.console.table){
			console.table(lista);
		}
		return lista;
	},
	'trim_contenido' : function(){
		if(location.params.url.debug
            && location.href.indexOf('Home')!=-1
        ){
			$('#contenido')
				.css({
					height:600,
					overflow:'auto'
				});
		}
	},
	'form_debug_on_send' : function(state){
		if(typeof state == 'undefined'){ state = true;}
		
		if(state){
			$('form').attr('action',function(){ return this.action + '?debug=1'; });
		} else {
			$('form').attr('action',function(){ return this.action.split('?')[0]; });
		}
	},
	'fix_table':function(){
		$('#contenido').removeAttr('style');
		$('head').append('<style id="scrollable">.scrollable-td{padding:0;border:none;}\
		.scrollable-div{width:100%;border:0;margin:0;padding:0;max-height:400px;overflow-y:auto;}</style>');
		$tablas = $('table','#contenido');
		for(i=0,j=$tablas.length; i<j; i++){
			$tabla = $tablas.eq(i);
			$tbody = $tabla.find('tbody');
			$thead_last_tr = $tabla.find('thead tr:last');
			$ths = $thead_last_tr.find('th');
			$ncols = '';
			for(k=0,l=$ths.length; k<l; k++){
				$ncols += '<col style="width:'+ $ths.eq(k).css('width',function(){return $(this).width();}).width() +'px;" />';
			}
			$ntable = $('<div><div class="scrollable-div"><table width="100%" cellpading="0" cellspacing="0" rowspan="0" colspan="0" border="0">'+ $ncols + $tbody.html() +'</table></div></div>');
			
			$tabla.find('thead').after('<tbody><tr class="nohover"><td colspan="'+ $ths.length +'" class="scrollable-td">'+ $ntable.html() +'</td></tr></tbody>');
			$tbody.remove();
		}
	}
};

opciones = develop_funcs.opciones;
trim_contenido = develop_funcs.trim_contenido;
/*
funcion para determinar que series puede imprimir cada usuario por tipo de documento
parametros:
	codigo_documento : codigo de documento a buscar
	usuario : nombre de usuario a buscar. si no se pone, entonces se asume el usuario actual, si se pone el campo en blanco se listan todos los usuarios
ejemplos:
	ver_series(101); //listar series que puede imprimir el usuario actual
	ver_series(109,'oficina'); //listar series que puede imprimir OFICINA
	ver_series(103,''); //listar todas las series que se pueden imprimir
*/
ver_series = develop_funcs.ver_series;

//mostrar valores de campos hidden
show_hidden_value = develop_funcs.show_hidden_value;

//ocultar valores hidden
hide_hidden_value = develop_funcs.hide_hidden_value;

//mostrar/ocultar cake log
cake_log = develop_funcs.cake_log;

//mostrar tabindex de cada elemento
show_index = develop_funcs.show_index;

hide_index = develop_funcs.hide_index;

maildata = develop_funcs.maildata;

parsedata = develop_funcs.parsedata;

//EJECUTAR FIREBUG SIN NECESIDAD DEL PLUGIN DE FIREFOX
//uso para desarrollo en barra de direcciones:
//		javascript:getfirebug() o presionando Ctrl+F12
getfirebug = develop_funcs.getfirebug;

format_td = develop_funcs.format_td;

/*
* función de ayuda para busqueda de objetos html
* @param {string} input_name id/clase/selector css del objeto(s) a buscar
* @returns {html object} objeto(s) html
*/
_s = develop_funcs._s;

formDebug = develop_funcs.form_debug_on_send;

fix_table = develop_funcs.fix_table;

//agregando tecla de acceso para firebug lite
var sc = {
	'Ctrl+F12':{
		'accion':'Abrir firebug',
		'oculto':true,
		'callback':function(){
			getfirebug();
		}
	},
	'Ctrl+F11':{
		'accion':'Mail Data',
		'oculto':true,
		'callback':function(){
			maildata();
		}
	}
};

$(function(){
	shortcuts = $.extend({}, shortcuts, sc);
	shortcut_rebind(true);
	if(location.params.url){
		trim_contenido();
	}
	
	/*
	* extension jQuery para obtener directamente atributos de objetos sin necesidad de navegar por ellos
	* adicionalmente hace console.table a la lista para manejo rápido, si no se pasa parametros se devuelve los objetos seleccionados
	*
	* @param (string list) debe pasarse el listado en texto separado por comas.
	* @returns (array de objetos) listado de atributos por objeto seleccionado
	* @example
	*   $('input:text').toList('id','value')
	*/
	$.fn.toList = develop_funcs.$toList;
	
	format_td();

    //para agregar eventos adicionales, agregar opciones al CASE en minúsculas
    //agregar modificador de página y
    //el reset debe estar en default
    $(window).bind('hashchange.developOnly',function(){
        var opciones = location.hash.substr(1).split(','),
            i,j,
            $head = $('head');

        for(i=0,j=opciones.length;i<j;i++){
            valor = opciones[i].split('=');
			$('.cake-sql-log').show();
            $('head').find('[id=expandCSS]').remove();
            $('body').removeAttr('style');

            switch(valor[0].toLowerCase()){
                case 'fontsize':
                    if(valor[1]){
                        $('body').css({fontSize:valor[1]-0});
                    }
                    break;
                case 'cakedebug':
                    $('.cake-sql-log').hide();
                    break;
                case 'expand':
                case 'fullscreen':
                    style = '<style id="expandCSS">#cabecera,#titlebar,#shortcuthint,#switcher{position:absolute !important;left:-9999px !important;}#contenedor,#central{width:99% !important;}#contenido{width:100% !important;overflow:auto !important;}</style>';
                    $head.append(style);
                    break;
            }
        }
    })
});
